import time

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.conf import settings
from django.utils.translation import gettext_lazy as _

from itsdangerous import URLSafeTimedSerializer as URLSTS

from meiduo_mall.base.models import BaseModel


class User(AbstractUser):
    """用户表"""
    mobile = models.CharField(verbose_name='手机号', max_length=11, unique=True)
    email_active = models.BooleanField(verbose_name='邮箱激活状态', default=False)
    default_address = models.ForeignKey('Address', related_name='users', null=True, blank=True,
                                        on_delete=models.SET_NULL, verbose_name='默认地址')
    created_at = models.DateField(verbose_name='创建日期', auto_now_add=True)
    updated_at = models.DateTimeField(verbose_name="更新日期", auto_now=True)
    is_active = models.BooleanField(
        _("启用"),
        default=True,
        help_text=_(
            "勾选：启用；未勾选：未启用。 "
            "启用后才有操作权限。"
        ),
    )
    is_staff = models.BooleanField(
        _("员工"),
        default=False,
        help_text=_(
            "勾选：在职；未勾选：离职。 "
            "离职则不能再登录网站。"
        ),
    )

    is_superuser = models.BooleanField(
        _("超级管理员"),
        default=False,
        help_text=_(
            "勾选：可修改删除网站所有数据；未勾选：不可修改删除网站所有数据。 "
            "此项权限请勿开启。"
        ),
    )

    class Meta:
        db_table = 'tb_users'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    def generate_verify_url(self):
        """生成Token"""
        serializer = URLSTS(settings.SECRET_KEY, salt=settings.SECRET_KEY)
        data = {
            'id': self.id,
            'email': self.email,
        }
        url = f'?token={serializer.dumps(data)}'
        # url = reverse('meiduo-ninja:verify_email') + f'?token={serializer.dumps(data)}'
        return url


class Address(BaseModel):
    """
    ⽤用户地址
    """
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='addresses', verbose_name='⽤用户')
    title = models.CharField(max_length=20, verbose_name='地址名称')
    receiver = models.CharField(max_length=20, verbose_name='收货⼈人')
    province = models.ForeignKey('areas.Area', on_delete=models.PROTECT, related_name='province_addresses',
                                 verbose_name='省')
    city = models.ForeignKey('areas.Area', on_delete=models.PROTECT, related_name='city_addresses', verbose_name='市')
    district = models.ForeignKey('areas.Area', on_delete=models.PROTECT, related_name='district_addresses',
                                 verbose_name='区')
    place = models.CharField(max_length=50, verbose_name='地址')
    mobile = models.CharField(max_length=11, verbose_name='⼿手机')
    tel = models.CharField(max_length=20, null=True, blank=True, default='', verbose_name='固定电话')
    email = models.CharField(max_length=30, null=True, blank=True, default='', verbose_name='电⼦子邮箱')
    is_deleted = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'tb_address'
        verbose_name = '⽤用户地址'
        verbose_name_plural = verbose_name
        ordering = ['-updated_at']
